package com.bankcomm.peripheral;

import android.content.Context;
import android.graphics.Bitmap;


                                     
public interface PeripheralInterface {
	
		/**
		 * 设备未连接
		 */
	  public static final int STATUS_DEVICE_DISCONNECTED= 0; 
	  /**
	   * 设备已通过有线方式连接
	   */
	  public static final int STATUS_DEVICE_CONNECTED_1	= 1;	 
	  /**
	   * 设备已通过无线方式连接(蓝牙)
	   */
	  public static final int STATUS_DEVICE_CONNECTED_2	= 2; 
	  /**
	   * 磁条卡
	   */
	  public static final int READMODE_MAGNETICCARD		= 1;
	  /**
	   * IC卡--接触式
	   */
	  public static final int READMODE_IC_CONTACT		= 2;	 
	  /**
	   * IC卡--非接触式
	   */
	  public static final int READMODE_IC_NONCONTACT    = 3;	
	  /**
	   * 通用读取模式（不指定具体的读取模块）
	   */
	  public static final int READMODE_COMMON			= 4;	 
     
	  
	  /**
	   * 功能：外设连接及初始化。
	   * @param connectMode 连接方式：     1：有线连接；2：蓝牙连接
	   * @return 0: 连接成功，1:连接失败；
	   */
       public int connectDevice(int connectMode);
       
        /**
         * 功能：断开外设连接，释放相关资源
         * @return 0:断开连接成功 ；1：断开连接失败
         */
	   public void disConnectDevice();   
	  
	   /**
	    *功能： 获取外设模块状态
	    * @param callback  
	    * @return  0:设备连接，1:设备断开；
	    */
       public int listenDeviceStatus(PeripheralCallback callback);	 
       /**
        * 取消当前操作
        */
       public void cancelOperation();
       
       /**
        * 功能：获取外设设备序列号
        * @return   返回值待定   
        */
	   public void getSerialNo(PeripheralCallback callback, int timeOut);
	   /**
	    * 功能：设置外设设备号
	    * @param serialNo   长度为16位
	    * @return
	    */
	   public void setCodeName(String serialNo, PeripheralCallback callback, int timeOut);
	   /**
	    * 获取设备编号
	    * @param callback  返回值为String类型
	    */
	   public void  getCodeName(PeripheralCallback callback);
       
       /**
        * 功能：读取银行卡基本信息
        * @param readMode 银行卡读取模式（指定读磁条卡、指定以接触方式读IC卡、指定以非接方式读IC卡、不指定具体读取模式）
        * @param callback  操作成功时，通过onSuccess回调返回BankCardInfoBean，
        *                  操作失败时 ，通过onFail通知调用方
        * @param timeOut 设置超时时间， （有默认超时时间）
        */
       public void ReadBankCardInfo(int readMode, PeripheralCallback callback, int timeOut);
       /**
        * 功能：读取身份证信息
        * @param callback 操作成功时，通过onSuccess回调返回IdentityInfoBean，
        * 				     操作失败时，通过onFail通知调用方
        * @param timeOut ：设置超时时间， （有默认值）
        * @param fCardTag 身份证/外国人居留证标识，0-身份证，1-外国人居留证；
        */
       public void ReadIDCardInfo(String fCardTag, PeripheralCallback callback, int timeOut);
		
		/**
        * 功能：读取密码键盘输入
        * @param inputTime 输入密码次数
        * @param callback  操作成功时，通过onSuccess回调返回String（用工作密钥加密之后的密文）
        *         若输入次数为2，则由键盘内部判断两次输入是否一致，若一致则通过onSuccess方法返回，
        *           不一致则通过onFail通知调用方
        * @param bankCardNo  :卡号
        * @param cipherTpye，加密算法（1=国际，2=国密）
        * @param timeOut  设置超时时间， （有默认值）
        */
	   public void getPin(int inputTime, String bankCardNo, PeripheralCallback callback, int cipherTpye, int timeOut);

	   /**
        *功能：获取指纹仪模块的指纹特征数据
        * @param callback  操作成功时，通过onSuccess回调返回byte[]，
        * 					操作失败时通过onFail通知调用方
		* @param cipherTpye，加密算法（1=国际，2=国密）；
        * @param timeOut   设置超时时间， （有默认值）
        */
	   public void getFingerCode(PeripheralCallback callback, int timeOut);

	   /**
	    * 功能：注册并获取指纹特征码
	    * @param callback  操作成功时，通过onSuccess回调返回byte[]
                                                                   操作失败时通过onFail通知调用方
	    * @param timeOut
	    */
	   public void captureFingerCode(PeripheralCallback callback, int timeOut);
 
	   /**
	    * 功能：打印String类型数据
	    * @param data   待打印数据
	    * @param callback    操作成功时，通过onSuccess回调返回int，操作失败时通过onFail通知调用方
	    */
	   public void  printDataString(String data, PeripheralCallback callback);	
	   /**
	    * 打印Bitmap类型数据
	    * @param data   待打印数据
	    * @param callback 操作成功时，通过onSuccess回调返回int，操作失败时通过onFail通知调用方
	    */
	   public void printDataBitmap(Bitmap data, PeripheralCallback callback);
	   
 
       /**设置交易参数
        * 功能：读取IC卡标签，可以用来读取55域数据
        * @param ICtype 卡类型
        * @param options  用于封装evm操作参数，如需读取的标签列表等
        * @param callback  通过onSuccess回调返回String类型、TLV格式的IC卡标签数据，操作失败时通过onFail通知调用方
        * @param timeOut  超时
        */
       public void ReadIcCardTags(int ICtype, EmvOptions options, PeripheralCallback callback, int timeOut);
       /**
        * 功能：IC卡ARPC校验
        * @param ICtype  卡类型
        * @param content 发卡行数据(调用ReadIcCardTags获取的55域数据)
        * @param script  写卡脚本
        * @param authflag 是否执行脚本
        * @param callback  通过onSuccess回调返回String类型的ScriptResult（校验结果）和TC（交易证书），操作失败时通过onFail通知调用方
        * @param timeout 超时时间
        * @return
        */
       public int validateARPC(int ICtype, String content, String script, int authflag, PeripheralCallback callback, int timeout);
         /**
          * 功能：上传主密钥保护公钥
          * @param  cipherTpye，加密算法（1=国际，2=国密）；
          * @param callback   操作成功时，通过onSuccess回调返回String类型、上传的公钥号，操作失败时通过onFail通知调用方
          * @param timeOut
          */
       public void getPublicKey(PeripheralCallback callback, int cipherTpye, int timeOut);
       /**
          * 功能：获取公钥加密后的主密钥，并对校验值进行验证
          * @param content  公钥加密之后的主密钥内容
          * @param code     主密钥号
          * @param callback   操作成功时，通过onSuccess回调返回String类型、下载的主密钥号，操作失败时通过onFail通知调用方
          * @param timeOut  超时时间
          * @param cipherTpye，加密算法（1=国际，2=国密）；
          */
       public void  loadMainKey(PeripheralCallback callback, byte[] content, int code, int cipherTpye, int timeOut);
       
      
       /**
        *  功能：获取主密钥加密后的工作钥，并对校验值进行验证
        * @param callback 
        * @param content  主密钥加密之后的工作内容
        * @param mainKeyCode 加密工作密钥的主密钥对应索引
        * @param code        工作密钥索引
		* @param cipherTpye，加密算法（1=国际，2=国密）
        * @param timeOut
        */
       public void loadWorkKey(PeripheralCallback callback, byte[] content, int mainKeyCode, int code, int cipherTpye, int timeOut);
       
     /**
      * 设置当前上下文对象
      * @param context
      */
     public void setContext(Context context);
     /**
      * 读取密码键盘输入，调用该方法时可设置输入密码位数及输入次数
      * @param inPutLength
      * @param inPutTime
      * @param bankCardNo
      * @param callback
      * @param cipherTpye
      * @param workKeyCode
      * @param isCipher
      * @param timeOut
      */
     public void getPinNew(int inPutLength, int inPutTime,
                           String bankCardNo, PeripheralCallback callback, int cipherTpye, int workKeyCode, int isCipher, int timeOut);
     /**
      * 获取外设手写板返回的签名图片。
      * @param width
      * @param height
      * @param callback
      * @param timeOut
      */
     public void getSignaturePhoto(String width, String height, PeripheralCallback callback, int timeOut);
     /**
      * 拓展接口，功能待定
      * @param data1
      * @param data2
      * @param data3
      * @param data4
      * @param data5
      * @param callback
      * @param timeOut
      */
     public void extendMethod(String data1, String data2, String data3, String data4, String data5, PeripheralCallback callback, int timeOut);
     /**
      * 拓展接口，功能待定
      * @param data1
      * @param data2
      * @param data3
      * @param data4
      * @param data5
      * @param callback
      * @param timeOut
      */
     public void extendMethod2(String data1, String data2, String data3, String data4, String data5, PeripheralCallback callback, int timeOut);
     
     /**
      * 获取IC交易日志明细
      * @param readMode
      * @param callback
      * @param timeout
      */
     public void readICTradeDetail(int readMode, PeripheralCallback callback, int timeout);
     /**
      * 获取圈存交易日志明细
      * @param readMode
      * @param callback
      * @param timeout
      */
     public void readICLoadDetail(int readMode, PeripheralCallback callback, int timeout);
     
     void getKeyStatus(PeripheralCallback var1, String var2, int var3);

     void getInitInfo(PeripheralCallback var1, int cipherTpye, int timeout);

     void loadMainKeyCN(PeripheralCallback var1, byte[] var2, byte[] var3, byte[] var4, byte[] var5, int var6, int var7, int var8);
     

}
